package pe.com.cotelasa.scp.controlador.backingBean;

import java.io.Serializable;
import java.math.BigDecimal;
import java.util.ArrayList;
import java.util.Collection;
import java.util.List;

import javax.faces.model.ListDataModel;
import javax.inject.Named;

import org.primefaces.model.SelectableDataModel;
import org.springframework.context.annotation.Scope;

import pe.com.cotelasa.scp.common.IObserver;
import pe.com.cotelasa.scp.entidad.Articulo;
import pe.com.cotelasa.scp.entidad.ArticuloSede;
import pe.com.cotelasa.scp.entidad.DetalleGuiaRemision;
import pe.com.cotelasa.scp.entidad.GuiaRemision;
import pe.com.cotelasa.scp.entidad.MaterialConsumido;

@SuppressWarnings("serial")
@Named(value = "BKCompAddArticuloStock")
@Scope("session")
public class BKCompAddArticuloStock implements Serializable {

    private ArticuloSede[] selectedArticulos;
    private ArticuloSedeDataModel listaArticulosStock;
    private List<IObserver> observers;
    private String nombreDialog;
    private Collection<Articulo> listaArticulos;
    private Collection<ArticuloSede> listaArticuloEncontrados;
    private Collection<ArticuloSede> listaArticuloAgregados;
    private ArticuloSede articuloSedeFormulario;
    private List<String> listaPartida;
    private DetalleGuiaRemision detalleGuiaFormulario;
    private GuiaRemision guiaFormulario;
    private List<DetalleGuiaRemision> listaDetalleSalida;
    
    private BigDecimal cantidadPedido;
    private BigDecimal cantidadRecibido;
    
    private boolean estaProcesado;
    private String mensajeResultado;
    private String mensajeNota;
    private String update;
    
    private List<String> listaMaterialElegido;
    private Collection<MaterialConsumido> listaMaterialConsumido;
    
    private boolean activarAgregar;

    public BKCompAddArticuloStock() {
        this.observers = new ArrayList<IObserver>();
        this.listaArticulosStock = new ArticuloSedeDataModel();
        this.listaArticulos = new ArrayList<Articulo>();
        this.listaArticuloEncontrados = new ArrayList<ArticuloSede>();
        this.articuloSedeFormulario = new ArticuloSede();
        this.listaPartida = new ArrayList<String>();
        this.listaDetalleSalida = new ArrayList<DetalleGuiaRemision>();
        this.estaProcesado = false;
        this.listaMaterialConsumido = new ArrayList<MaterialConsumido>();
    }
    

    public ArticuloSede[] getSelectedArticulos() {
        return selectedArticulos;
    }

    public void addListaArticulosStock(Collection<ArticuloSede> lista) {
        listaArticulosStock = new ArticuloSedeDataModel((List<ArticuloSede>) lista);
    }

    public ArticuloSedeDataModel getListaArticulosStock() {
        return listaArticulosStock;
    }

    public void setListaArticulosStock(ArticuloSedeDataModel listaArticulosStock) {
        this.listaArticulosStock = listaArticulosStock;
    }

    public void setSelectedArticulos(ArticuloSede[] selectedArticulos) {
        this.selectedArticulos = selectedArticulos;
    }

    public void addObservers(IObserver observador) {
        observers.add(observador);
    }

    public List<IObserver> getObservers() {
        return observers;
    }

    public String getNombreDialog() {
        return nombreDialog;
    }

    public void setNombreDialog(String nombreDialog) {
        this.nombreDialog = nombreDialog;
    }

    public Collection<Articulo> getListaArticulos() {
        return listaArticulos;
    }

    public void setListaArticulos(Collection<Articulo> listaArticulos) {
        this.listaArticulos = listaArticulos;
    }

    public Collection<ArticuloSede> getListaArticuloEncontrados() {
        return listaArticuloEncontrados;
    }

    public void setListaArticuloEncontrados(Collection<ArticuloSede> listaArticuloEncontrados) {
        this.listaArticuloEncontrados = listaArticuloEncontrados;
    }

    public Collection<ArticuloSede> getListaArticuloAgregados() {
        return listaArticuloAgregados;
    }

    public void setListaArticuloAgregados(Collection<ArticuloSede> listaArticuloAgregados) {
        this.listaArticuloAgregados = listaArticuloAgregados;
    }

    public ArticuloSede getArticuloSedeFormulario() {
        return articuloSedeFormulario;
    }

    public void setArticuloSedeFormulario(ArticuloSede articuloSedeFormulario) {
        this.articuloSedeFormulario = articuloSedeFormulario;
    }

    public List<String> getListaPartida() {
        return listaPartida;
    }

    public void setListaPartida(List<String> listaPartida) {
        this.listaPartida = listaPartida;
    }

    public DetalleGuiaRemision getDetalleGuiaFormulario() {
        return detalleGuiaFormulario;
    }

    public void setDetalleGuiaFormulario(DetalleGuiaRemision detalleGuiaFormulario) {
        this.detalleGuiaFormulario = detalleGuiaFormulario;
    }

    public BigDecimal getCantidadPedido() {
        return cantidadPedido;
    }

    public void setCantidadPedido(BigDecimal cantidadPedido) {
        this.cantidadPedido = cantidadPedido;
    }

    public BigDecimal getCantidadRecibido() {
        return cantidadRecibido;
    }

    public void setCantidadRecibido(BigDecimal cantidadRecibido) {
        this.cantidadRecibido = cantidadRecibido;
    }

    public GuiaRemision getGuiaFormulario() {
        return guiaFormulario;
    }

    public void setGuiaFormulario(GuiaRemision guiaFormulario) {
        this.guiaFormulario = guiaFormulario;
    }

    public List<DetalleGuiaRemision> getListaDetalleSalida() {
        return listaDetalleSalida;
    }

    public void setListaDetalleSalida(List<DetalleGuiaRemision> listaDetalleSalida) {
        this.listaDetalleSalida = listaDetalleSalida;
    }

    public boolean isEstaProcesado() {
        return estaProcesado;
    }

    public void setEstaProcesado(boolean estaProcesado) {
        this.estaProcesado = estaProcesado;
    }

    public String getMensajeResultado() {
        return mensajeResultado;
    }

    public void setMensajeResultado(String mensajeResultado) {
        this.mensajeResultado = mensajeResultado;
    }

    public Collection<MaterialConsumido> getListaMaterialConsumido() {
        return listaMaterialConsumido;
    }

    public void setListaMaterialConsumido(Collection<MaterialConsumido> listaMaterialConsumido) {
        this.listaMaterialConsumido = listaMaterialConsumido;
    }

    public String getUpdate() {
        return update;
    }

    public void setUpdate(String update) {
        this.update = update;
    }

    public boolean isActivarAgregar() {
        return activarAgregar;
    }

    public void setActivarAgregar(boolean activarAgregar) {
        this.activarAgregar = activarAgregar;
    }

    public String getMensajeNota() {
        return mensajeNota;
    }

    public void setMensajeNota(String mensajeNota) {
        this.mensajeNota = mensajeNota;
    }

    public class ArticuloSedeDataModel extends ListDataModel<ArticuloSede> implements SelectableDataModel<ArticuloSede> {

        public ArticuloSedeDataModel() {
        }

        public ArticuloSedeDataModel(List<ArticuloSede> data) {
            super(data);
        }

        @Override
        public ArticuloSede getRowData(String rowKey) {
            List<ArticuloSede> cars = (List<ArticuloSede>) getWrappedData();
            int i = 0;
            for (ArticuloSede car : cars) {
                if (("" + car.getId()).equals(rowKey)) {
                    return car;
                }
                i++;
            }

            return null;
        }

        @Override
        public Object getRowKey(ArticuloSede articuloSede) {
            return articuloSede.getId();
        }
    }
}
